package com.dexing.od2;


import java.util.*;
import java.util.stream.Collectors;

/**
 *  放暑假了，小明决定到某旅游景点游玩，他在网上搜索到了各种价位的酒店(长度为n的 数组A)，
 *  他的心理价位是x元，请帮他筛选出k个最接近x元的酒店 (n<=k<0) ,
 *  并由低到高打印酒店的价格输入描述
 *  第一行: n,k，x 
 *  第二行: A[o] A[1] A[2]...A[n-1]
 *  输出描述从低到高打印筛选出的酒店价格
 *      示例一
 *  
 *  输入 
 *  10 5 6 
 *  1 2 3 4 5 6 7 8 9 10 
 *  输出 
 *  4 5 6 7 8 
 *  示例二
 *  输入 
 *  10 4 6 
 *  10 9 8 7 6 5 4 3 2 1 
 *  输出 
 *  4 5 6 7 
 *  说明 数组长度n = 10，筛选个数 k = 4，目标价位x = 6 当4 和8 距离x 相同时，优先选择价格低的4
 *  示例三
 *  输入
 *  6 3 1000
 *  30 30 200 500 70 300
 *  输出
 *  200 300 500
 *  备注
 *  1.酒店价格数组A和小明的心理价位x均为整型数据;(0>n,k,x>10000)
 *  2.优先选择价格最接近心理价位的酒店，若两家酒店和心理价位差价相同，则选择价格较低的酒店。(比如100元和300元距离心理价位200元同样接近，此时选择100元)
 *  3.酒店价格可能相同重复
 */
public class D0201HotailPrice {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int k = scanner.nextInt();
        int x = scanner.nextInt();
        int[] price = new int[n];
        for (int i = 0; i < n; i++) {
            price[i] = scanner.nextInt();
        }
        Arrays.sort(price);
        int[][] pricek = new int[n][2];
        for (int i = 0; i < n; i++) {
            int p = price[i];
            pricek[i][0] = p;
            // 差价
            pricek[i][1] = Math.abs(p -x);
        }
        List<int[]> soredP = Arrays.stream(pricek).sorted(Comparator.comparing(h -> h[1])).collect(Collectors.toList());
        // 满足要求的价格
        ArrayList<Integer> integers = new ArrayList<>();
        for (int i = 0; i < k; i++) {
            integers.add(soredP.get(i)[0]);
        }
        integers.sort(Integer::compare);
        for (int i = 0; i < integers.size(); i++) {
            System.out.print(integers.get(i));
            if (i != integers.size() ){
                System.out.print(" ");
            }
        }
    }
}
